import java.util.Collections;
import java.util.Stack;

public class Baralho {
	
	Stack<Carta> deck;
	
	public Baralho() {
		init();
	}
	
	/**
	 * Metodo de inicialização das cartas do jogo.
	 */
	private void init() {
		deck = new Stack<Carta>();
		
		for(int i = 0; i <= 9;i++) {
			for(int j = 1; j <= 2;j++) {
				Carta verde = new Carta(Cor.VERDE,i);
				Carta vermelha = new Carta(Cor.VERMELHO,i);
				Carta azul = new Carta(Cor.AZUL,i);
				Carta amarela = new Carta(Cor.AMARELO,i);
				
				deck.push(verde);
				deck.push(vermelha);
				deck.push(azul);
				deck.push(amarela);
			}
		}
		
		for(int i = 1;i <= 2;i++) {
			Carta verde_r = new Carta(Cor.VERDE,Efeito.REVERSE);
			Carta verde_d = new Carta(Cor.VERDE,Efeito.DRAW_2);
			Carta verde_s = new Carta(Cor.VERDE,Efeito.SKIP);
			
			Carta vermelha_r = new Carta(Cor.VERMELHO,Efeito.REVERSE);
			Carta vermelha_d = new Carta(Cor.VERMELHO,Efeito.DRAW_2);
			Carta vermelha_s = new Carta(Cor.VERMELHO,Efeito.SKIP);
			
			Carta azul_r = new Carta(Cor.AZUL,Efeito.REVERSE);
			Carta azul_d = new Carta(Cor.AZUL,Efeito.DRAW_2);
			Carta azul_s = new Carta(Cor.AZUL,Efeito.SKIP);
			
			Carta amarela_r = new Carta(Cor.AMARELO,Efeito.REVERSE);
			Carta amarela_d = new Carta(Cor.AMARELO,Efeito.DRAW_2);
			Carta amarela_s = new Carta(Cor.AMARELO,Efeito.SKIP);
			
			deck.push(verde_r);
			deck.push(verde_d);
			deck.push(verde_s);
			deck.push(vermelha_r);
			deck.push(vermelha_d);
			deck.push(vermelha_s);
			deck.push(azul_r);
			deck.push(azul_d);
			deck.push(azul_s);
			deck.push(amarela_r);
			deck.push(amarela_d);
			deck.push(amarela_s);
		}
		
		for(int i = 1;i <= 2;i++) {
			Carta wild = new Carta(Cor.ESPECIAL,Efeito.WILD);
			Carta wild_4 = new Carta(Cor.ESPECIAL,Efeito.WILD_DRAW_4);
			
			deck.push(wild);
			deck.push(wild_4);
		}
		
		Collections.shuffle(deck); 
	}
	
	public Stack<Carta> getDeck() {
		return this.deck;
	}
}